// #include<iostream>
// using namespace std;
// #include<signal.h>
// #include<unistd.h>
// #include<sys/types.h>
// #include<sys/wait.h>


// void myhander(int signo)
// {
//   cout << "get a sig, number: " << signo << endl; //什么都不干， 只打印消息
// }



// int main()
// {
//   pid_t id = fork();
//   if (id == 0)
//   {
//     //child
//     int cnt = 500;
//     while (cnt--)
//     {
//       cout << "i am a child process, pid: " << getpid() << "    cnt: " << cnt << endl;  
//       sleep(1);
//       cnt--;
//     }

//     exit(0);  
//   }


//   int status = 0;
//   pid_t rid = waitpid(id, &status, 0);
//   if (rid == id)
//   {
//     cout << "child quit info, rid: " << rid << " exit code:" 
//     << ((status >> 8) & 0xFF) << " exit signal:" 
//     << (status & 0x7F) << " core dump:" << ((status >> 7) & 1) << endl; 
//   }











//  signal(SIGSEGV, myhander);
//
//
//  cout << "pointer error before" << endl;
//  sleep(2);
//  
//
//  int* p = nullptr;
//  *p = 100;
//   
////  int a = 10;
////var  a /= 0;  //产生异常
//  
//
//  sleep(2);
//  cout << "pointer error after" << endl;
//
//  return 0;
// }



// #include<iostream>
// using namespace std;
// #include<signal.h>
// #include<unistd.h>
// #include<sys/types.h>
// #include<sys/wait.h>


// void myhander(int signo)
// {
//   cout << "get a sig, number: " << signo << endl; //什么都不干， 只打印消息
// }



// int main()
// {
//   pid_t id = fork();
//   if (id == 0)
//   {
//     //child
//     int cnt = 500;
//     while (cnt--)
//     {
//       cout << "i am a child process, pid: " << getpid() << "    cnt: " << cnt << endl;  
//       sleep(1);
//       cnt--;
//     }

//     exit(0);  
//   }


//   int status = 0;
//   pid_t rid = waitpid(id, &status, 0);
//   if (rid == id)
//   {
//     cout << "child quit info, rid: " << rid << " exit code:" 
//     << ((status >> 8) & 0xFF) << " exit signal:" 
//     << (status & 0x7F) << " core dump:" << ((status >> 7) & 1) << endl; 
//   }

// }



//
//#include<iostream>
//using namespace std;
//#include<signal.h>
//#include<unistd.h>
//#include<sys/types.h>
//#include<sys/wait.h>
//
//
//
//void myhander(int signo)
//{
//  cout << "get a sig, number: " << signo << endl; //什么都不干， 只打印消息
//}
//
//
//
//int main()
//{
//  int a = 10;
//  int b = 0;
//  a /= b;
//
//  cout << "a = " << a << endl;
//}
//
//


#include<iostream>
using namespace std;
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<signal.h>

void myhander(int x)
{
  cout << "signal is " << x << endl;
}


int main()
{
  signal(2, myhander);
  int cnt = 5;

  while (true)
  {
    cout << "hello signal ， PID : " << getpid() << endl;
    sleep(1);
    cnt--;  
  	if (cnt == 0) raise(2);
	}
  return 0;
}










